import UIKit

@available(iOS 7.0, *)
extension QKC where AA :UICollectionViewFlowLayoutInvalidationContext {
		// if set to NO, flow layout will not requery the collection view delegate for size information etc.
    open func invalidateFlowLayoutDelegateMetrics_qk_s(_ invalidateFlowLayoutDelegateMetrics:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: invalidateFlowLayoutDelegateMetrics).then_QK { $0.value.invalidateFlowLayoutDelegateMetrics = invalidateFlowLayoutDelegateMetrics }
	}
    open func invalidateFlowLayoutDelegateMetrics_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.invalidateFlowLayoutDelegateMetrics
	}

		// if set to NO, flow layout will keep all layout information, effectively not invalidating - useful for a subclass which invalidates only a piece of itself
    open func invalidateFlowLayoutAttributes_qk_s(_ invalidateFlowLayoutAttributes:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: invalidateFlowLayoutAttributes).then_QK { $0.value.invalidateFlowLayoutAttributes = invalidateFlowLayoutAttributes }
	}
    open func invalidateFlowLayoutAttributes_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.invalidateFlowLayoutAttributes
	}

}

@available(iOS 6.0, *)
extension QKC where AA :UICollectionViewFlowLayout {
    open func minimumLineSpacing_qk_s(_ minimumLineSpacing:  CGFloat) -> QKC<AA,YY,ZZ, CGFloat>{
		return link(next: minimumLineSpacing).then_QK { $0.value.minimumLineSpacing = minimumLineSpacing }
	}
    open func minimumLineSpacing_qk_g() -> QKC<AA,YY,ZZ, CGFloat>{
		 self +^ self.value.minimumLineSpacing
	}

    open func minimumInteritemSpacing_qk_s(_ minimumInteritemSpacing:  CGFloat) -> QKC<AA,YY,ZZ, CGFloat>{
		return link(next: minimumInteritemSpacing).then_QK { $0.value.minimumInteritemSpacing = minimumInteritemSpacing }
	}
    open func minimumInteritemSpacing_qk_g() -> QKC<AA,YY,ZZ, CGFloat>{
		 self +^ self.value.minimumInteritemSpacing
	}

    open func itemSize_qk_s(_ itemSize:  CGSize) -> QKC<AA,YY,ZZ, CGSize>{
		return link(next: itemSize).then_QK { $0.value.itemSize = itemSize }
	}
    open func itemSize_qk_g() -> QKC<AA,YY,ZZ, CGSize>{
		 self +^ self.value.itemSize
	}

		// defaults to CGSizeZero - setting a non-zero size enables cells that self-size via -preferredLayoutAttributesFittingAttributes:
    @available(iOS 8.0, *)
    open func estimatedItemSize_qk_s(_ estimatedItemSize:  CGSize ) -> QKC<AA,YY,ZZ, CGSize >{
		return link(next: estimatedItemSize).then_QK { $0.value.estimatedItemSize = estimatedItemSize }
	}
    @available(iOS 8.0, *)
    open func estimatedItemSize_qk_g() -> QKC<AA,YY,ZZ, CGSize >{
		 self +^ self.value.estimatedItemSize
	}

		// default is UICollectionViewScrollDirectionVertical
    open func scrollDirection_qk_s(_ scrollDirection:  UICollectionView.ScrollDirection ) -> QKC<AA,YY,ZZ, UICollectionView.ScrollDirection >{
		return link(next: scrollDirection).then_QK { $0.value.scrollDirection = scrollDirection }
	}
    open func scrollDirection_qk_g() -> QKC<AA,YY,ZZ, UICollectionView.ScrollDirection >{
		 self +^ self.value.scrollDirection
	}

    open func headerReferenceSize_qk_s(_ headerReferenceSize:  CGSize) -> QKC<AA,YY,ZZ, CGSize>{
		return link(next: headerReferenceSize).then_QK { $0.value.headerReferenceSize = headerReferenceSize }
	}
    open func headerReferenceSize_qk_g() -> QKC<AA,YY,ZZ, CGSize>{
		 self +^ self.value.headerReferenceSize
	}

    open func footerReferenceSize_qk_s(_ footerReferenceSize:  CGSize) -> QKC<AA,YY,ZZ, CGSize>{
		return link(next: footerReferenceSize).then_QK { $0.value.footerReferenceSize = footerReferenceSize }
	}
    open func footerReferenceSize_qk_g() -> QKC<AA,YY,ZZ, CGSize>{
		 self +^ self.value.footerReferenceSize
	}

    open func sectionInset_qk_s(_ sectionInset:  UIEdgeInsets) -> QKC<AA,YY,ZZ, UIEdgeInsets>{
		return link(next: sectionInset).then_QK { $0.value.sectionInset = sectionInset }
	}
    open func sectionInset_qk_g() -> QKC<AA,YY,ZZ, UIEdgeInsets>{
		 self +^ self.value.sectionInset
	}

	/// NOTE: Content inset will always be respected at a minimum. For example, if the sectionInsetReference equals `.fromSafeArea`, but the adjusted content inset is greater that the combination of the safe area and section insets, then section content will be aligned with the content inset instead.
    @available(iOS 11.0, *)
    open func sectionInsetReference_qk_s(_ sectionInsetReference:  UICollectionViewFlowLayout.SectionInsetReference) -> QKC<AA,YY,ZZ, UICollectionViewFlowLayout.SectionInsetReference>{
		return link(next: sectionInsetReference).then_QK { $0.value.sectionInsetReference = sectionInsetReference }
	}
    @available(iOS 11.0, *)
    open func sectionInsetReference_qk_g() -> QKC<AA,YY,ZZ, UICollectionViewFlowLayout.SectionInsetReference>{
		 self +^ self.value.sectionInsetReference
	}

	// Set these properties to YES to get headers that pin to the top of the screen and footers that pin to the bottom while scrolling (similar to UITableView).
    @available(iOS 9.0, *)
    open func sectionHeadersPinToVisibleBounds_qk_s(_ sectionHeadersPinToVisibleBounds:  Bool) -> QKC<AA,YY,ZZ, Bool>{
		return link(next: sectionHeadersPinToVisibleBounds).then_QK { $0.value.sectionHeadersPinToVisibleBounds = sectionHeadersPinToVisibleBounds }
	}
    @available(iOS 9.0, *)
    open func sectionHeadersPinToVisibleBounds_qk_g() -> QKC<AA,YY,ZZ, Bool>{
		 self +^ self.value.sectionHeadersPinToVisibleBounds
	}

    @available(iOS 9.0, *)
    open func sectionFootersPinToVisibleBounds_qk_s(_ sectionFootersPinToVisibleBounds:  Bool) -> QKC<AA,YY,ZZ, Bool>{
		return link(next: sectionFootersPinToVisibleBounds).then_QK { $0.value.sectionFootersPinToVisibleBounds = sectionFootersPinToVisibleBounds }
	}
    @available(iOS 9.0, *)
    open func sectionFootersPinToVisibleBounds_qk_g() -> QKC<AA,YY,ZZ, Bool>{
		 self +^ self.value.sectionFootersPinToVisibleBounds
	}

}

